package aceim.app.view.page.personalinfo; import aceim.api.dataentity.Buddy; import aceim.api.dataentity.ListFeature; import aceim.api.dataentity.PersonalInfo; import aceim.api.dataentity.ProtocolServiceFeature; import aceim.api.dataentity.ToggleFeature; import aceim.api.service.ApiConstants; import aceim.api.utils.Logger; import aceim.app.AceImException; import aceim.app.R; import aceim.app.dataentity.Account; import aceim.app.dataentity.ProtocolResources; import aceim.app.service.ServiceUtils; import aceim.app.utils.DialogUtils; import aceim.app.utils.ViewUtils; import aceim.app.view.page.Page; import aceim.app.widgets.bottombar.BottomBarButton; import android.content.Context; import android.content.res.Resources; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.os.RemoteException; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.LinearLayout; import com.androidquery.AQuery; public class PersonalInfoPage extends Page { private final PersonalInfo mInfo; private BottomBarButton mAddBtn; private BottomBarButton mMoveBtn; private BottomBarButton mRenameBtn; private BottomBarButton mDeleteBtn; private BottomBarButton mJoinBtn; private BottomBarButton mLeaveBtn; private BottomBarButton mCopyAllBtn; public PersonalInfoPage(PersonalInfo info) { this.mInfo = info; } @Override public Drawable getIcon(Context context) { return context.getResources().getDrawable(android.R.drawable.ic_menu_info_details); } @Override public String getTitle(Context context) { return context.getString(R.string.personal_info_X, mInfo.getProtocolUid()); } @Override protected View createView(LayoutInflater inflater, ViewGroup group, Bundle saved) { View view = inflater.inflate(R.layout.personal_info, null); mCopyAllBtn = (BottomBarButton) view.findViewById(R.id.copy); mAddBtn = (BottomBarButton) view.findViewById(R.id.add); mMoveBtn = (BottomBarButton) view.findViewById(R.id.move); mRenameBtn = (BottomBarButton) view.findViewById(R.id.rename); mDeleteBtn = (BottomBarButton) view.findViewById(R.id.remove); mJoinBtn = (BottomBarButton) view.findViewById(R.id.join); mLeaveBtn = (BottomBarButton) view.findViewById(R.id.leave); AQuery aq = new AQuery(view); Buddy buddy; try { buddy = getMainActivity().getCoreService().getBuddy(mInfo.getServiceId(), mInfo.getProtocolUid()); } catch (RemoteException e) { getMainActivity().onRemoteException(e); return view; } final String name = mInfo.getProperties().containsKey(PersonalInfo.INFO_NICK) ? mInfo.getProperties().getString(PersonalInfo.INFO_NICK) : mInfo.getProtocolUid(); if (buddy != null) { ViewUtils.fillIcon(R.id.icon, aq, buddy.getFilename(), getMainActivity()); } aq.id(R.id.name).text(name); aq.id(R.id.protocolUid).text(mInfo.getProtocolUid()); mAddBtn.setVisibility(mInfo.isMultichat() || buddy != null ? View.GONE : View.VISIBLE); mDeleteBtn.setVisibility(buddy == null ? View.GONE : View.VISIBLE); mRenameBtn.setVisibility(buddy == null ? View.GONE : View.VISIBLE); mMoveBtn.setVisibility(mInfo.isMultichat() || buddy == null ? View.GONE : View.VISIBLE); mJoinBtn.setVisibility(mInfo.isMultichat() && (buddy == null || buddy.getOnlineInfo().getFeatures().getByte(ApiConstants.FEATURE_STATUS, (byte) -1) < 0) ? View.VISIBLE : View.GONE); mLeaveBtn.setVisibility(mInfo.isMultichat() && buddy != null && (buddy.getOnlineInfo().getFeatures().getByte(ApiConstants.FEATURE_STATUS, (byte) -1) > -1) ? View.VISIBLE : View.GONE); final Account a; try { a = getMainActivity().getCoreService().getAccount(mInfo.getServiceId()); } catch (RemoteException e1) { getMainActivity().onRemoteException(e1); return view; } mAddBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { if (!mInfo.isMultichat()) { Buddy buddy = new Buddy(mInfo.getProtocolUid(), a.getProtocolUid(), a.getProtocolName(), mInfo.getServiceId()); buddy.setGroupId(ApiConstants.NOT_IN_LIST_GROUP_ID); buddy.setName(name.toString()); DialogUtils.showAddBuddyDialog(buddy, a, getMainActivity()); } } }); mDeleteBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { DialogUtils.showConfirmRemoveBuddyDialog(a.getBuddyByProtocolUid(mInfo.getProtocolUid()), getMainActivity()); } }); mRenameBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { DialogUtils.showBuddyRenameDialog(a.getBuddyByProtocolUid(mInfo.getProtocolUid()), getMainActivity()); } }); mMoveBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { DialogUtils.showBuddyMoveDialog(a.getBuddyByProtocolUid(mInfo.getProtocolUid()), a, getMainActivity()); } }); mJoinBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { try { getMainActivity().getCoreService().joinChat(mInfo.getServiceId(), mInfo.getProtocolUid()); } catch (RemoteException e) { getMainActivity().onRemoteException(e); } } }); mLeaveBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { try { getMainActivity().getCoreService().leaveChat(mInfo.getServiceId(), mInfo.getProtocolUid()); } catch (RemoteException e) { getMainActivity().onRemoteException(e); } } }); mCopyAllBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { String text = personalInfo2Text(); ServiceUtils.toClipboard(getMainActivity(), text, getTitle(getMainActivity())); ViewUtils.showInformationToast(getMainActivity(), android.R.drawable.ic_menu_agenda, R.string.copied_to_clipboard, null); } }); /*MultiChatRoom chat = new MultiChatRoom(mInfo.getProtocolUid(), a.getProtocolUid(), a.getProtocolName(), mInfo.getServiceId()); chat.setName(mInfo.getProperties().getString(PersonalInfo.INFO_NICK));*/ LinearLayout container = (LinearLayout) view.findViewById(R.id.container); for (String key : mInfo.getProperties().keySet()) { if (key.equals(PersonalInfo.INFO_NICK)) continue; View item = inflater.inflate(R.layout.personal_info_item, null); AQuery aqi = new AQuery(item); ImageView iicon = (ImageView) item.findViewById(R.id.icon); //TODO fix iicon.getLayoutParams().width = 0; aqi.id(R.id.key).text(key); aqi.id(R.id.value).text(mInfo.getProperties().getString(key)); container.addView(item); } if (buddy != null) { ProtocolResources res = getMainActivity().getProtocolResourcesForAccount(a); try { Resources protocolResources = res.getNativeResourcesForProtocol(getMainActivity().getPackageManager()); for (String key : buddy.getOnlineInfo().getFeatures().keySet()) { ProtocolServiceFeature f = res.getFeature(key); if (f == null) { continue; } View item = inflater.inflate(R.layout.personal_info_item, null); AQuery aqi = new AQuery(item); aqi.id(R.id.key).text(f.getFeatureName()); if (f instanceof ListFeature) { ListFeature lf = (ListFeature) f; byte v = buddy.getOnlineInfo().getFeatures().getByte(key, (byte) -1); if (v > -1) { aqi.id(R.id.value).text(protocolResources.getString(lf.getNames()[v])); } } else if (f instanceof ToggleFeature) { aqi.id(R.id.value).text(Boolean.toString(((ToggleFeature)f).getValue())); } } } catch (AceImException e) { Logger.log(e); } } return view; } private String personalInfo2Text() { StringBuilder sb = new StringBuilder(); sb.append(mInfo.getProtocolUid()); sb.append("\n\n"); for (String property : mInfo.getProperties().keySet()) { sb.append(property); sb.append(": "); sb.append(mInfo.getProperties().get(property)); sb.append("\n"); } return sb.toString(); } /** * @return the mInfo */ public PersonalInfo getInfo() { return mInfo; } }